package com.studyweb.mapper;

import com.studyweb.pojo.entity.UserCheckin;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;
/**
 * 用户签到数据访问接口
 */
@Mapper
public interface UserCheckinMapper {
    
    /**
     * 插入新的签到记录
     *
     * @param userCheckin 签到记录
     * @return 影响的行数
     */
    int insert(UserCheckin userCheckin);
    
    /**
     * 更新签到记录
     *
     * @param userCheckin 签到记录
     * @return 影响的行数
     */
    int update(UserCheckin userCheckin);
    
    /**
     * 根据用户ID和日期查询签到记录
     *
     * @param userId 用户ID
     * @param checkinDate 签到日期
     * @return 签到记录
     */
    UserCheckin selectByUserIdAndDate(@Param("userId") Long userId, @Param("checkinDate") LocalDate checkinDate);
    
    /**
     * 获取用户最近的签到记录
     *
     * @param userId 用户ID
     * @return 最近的签到记录
     */
    UserCheckin selectLatestByUserId(@Param("userId") Long userId);
    
    /**
     * 获取用户的连续签到天数
     *
     * @param userId 用户ID
     * @return 连续签到天数
     */
    Integer getConsecutiveDays(@Param("userId") Long userId);
    
    /**
     * 获取用户指定日期范围内的签到记录
     *
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 签到记录列表
     */
    List<UserCheckin> selectByUserIdAndDateRange(@Param("userId") Long userId, 
                                                @Param("startDate") LocalDate startDate, 
                                                @Param("endDate") LocalDate endDate);
    
    /**
     * 获取用户的总签到次数
     *
     * @param userId 用户ID
     * @return 总签到次数
     */
    int countByUserId(@Param("userId") Long userId);
}